package cn.bonoon.kernel.web.annotations.form;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import cn.bonoon.kernel.util.AlignType;

/**
 * <pre>
 * 指定查看的明细项；详细界面的定义注解为：{@link FormDetail}
 * 
 * 如果需要在明细项上进行解释说明，则可以使用注解{@link PropertyHelper}
 * 
 * 如果该明细项需要显示多个字段值的组合，则可以使用{@link #append()}属性进行指定
 * 具体的参考{@link PropertyAppend}
 * </pre>
 * @author jackson
 *
 */
@Target(FIELD)
@Retention(RUNTIME)
public @interface PropertyDetail {
	
	/** 用于界面显示的名字 */
	String name() default "";
	
	/** 是否忽略掉该字段的界面生成，如果没有定义{@link PropertyDetail}也表示默认是生成界面的，根据设置的默认值来生成 */
	boolean ignore() default false;

	/** <pre>
	 * 单位。如：元、个、天等单位。
	 * 会自动添加到数据项后面
	 * </pre>  */
	String unit() default "";

	/**
	 * <pre>
	 * 
	 * ordinal
	 * 
	 * 默认值为：10
	 * </pre>
	 * @return
	 */
	int value() default 10;

	int height() default 0;

	/**
	 * <pre>
	 * 0表示没有夸列,即对应html代码里的colspan="1"的情况.
	 * 大于小的表示有夸列,1表示夸1列,对应html代码为colspan="3"
	 * 
	 * <font color='red'>注意:夸一列是两个table的格,是一对&lt;th&gt;&lt;/th&gt;&lt;td&gt;&lt;/td&gt;</font>
	 * </pre>
	 * 
	 * @return
	 */
	int colspan() default 0;
	int rowspan() default 0;

	/** 是否显示行的标题头，即&lt;th&gt;部分 */
	boolean showHead() default true;

	/**
	 * <pre>
	 * 在当前显示的字段后面追加其它指定的字段
	 * </pre>
	 * @return
	 */
	PropertyAppend[] append() default {};

	AlignType align() default AlignType.NONE;
	
	/** 明细项的查看方式，默认为{@link DetailType#TEXT} */
	DetailType detailType() default DetailType.TEXT;
	
	/**
	 * <pre>
	 * 详细信息的查看方式，默认为{@link #TEXT}文本方式查看
	 * 可以指定为其它类型
	 * </pre>
	 * @author jackson
	 *
	 */
	public enum DetailType{ 
		/**
		 * 以文本的方式查看
		 */
		TEXT, 
		/**
		 * 以图片的方式查看
		 */
		IMAGE, 
		/**
		 * 以附件的方式查看，并可以下载附件的内容
		 */
		DOWNLOAD 
	}
}
